const Koa = require('koa')
const fs=require('fs')
const path=require('path')

const app =new Koa()

//
const viteConfig=require('./vite.config')
const alias=viteConfig.resolve.alias
console.log('viteConfig --->alias',alias)


//挂载路由
app.use(async (ctx)=>{
    if(ctx.request.url==='/'){
        const indexHtml=fs.readFileSync(path.resolve(__dirname,'./index.html'))
        ctx.response.body=indexHtml
        ctx.response.set('Content-Type','text/html')
    }

    if(ctx.request.url.endsWith('.js')){
        //细节注意：在index.html中引入了./src/main.js
        //浏览器实际发起的请求是'主机地址/src/main.js'
        //ctx.request.url是/src/main.js，所以读取文件路径需要拼接一个点

        //在main.js中引入import count from '/src/count.js'
        //浏览器实际发起的请求是'主机地址/src/count.js'。

        //即。浏览器里的请求，都是基于主机路径的
        const mainJS=fs.readFileSync(path.resolve(__dirname,'.'+ctx.request.url)) //buffer格式,需要使用toString转换下
        ctx.response.body=dealAlias(mainJS.toString())
        ctx.response.set('Content-Type','application/javascript')
    }

})

//处理别名。替换为真正的路径
function dealAlias(JScontent){
    const entries=Object.entries(alias) //[["@","xxx"],["@assets","xxx"]]
 
    for(let [alias,path] of entries){
        //path是程序运行时所在的绝对路径。例如：/Users/yc/Desktop/example-learn/vite-learn/dev-server/src/
        let srcIndex=path.indexOf('/src')
        let newPath=path.slice(srcIndex,path.length)
        
        JScontent=JScontent.replace(alias,newPath)
       
    }
    
    return JScontent
    
}

//监听端口
app.listen('8080',()=>{
    console.log('启动')
})